'use strict';

// 工具函数
const Tool = {
    getTime() {
        return 'rrks' + String(new Date().getTime())
    },
    html(str) {
        var s = '';
        if (str.length == 0) return '';
        s = str.replace(/&lt;/g, "<");
        s = s.replace(/&gt;/g, ">");
        s = s.replace(/&#39;/g, "'");
        s = s.replace(/&quot;/g, "\"");
        s = s.replace(/&amp;/g, "&");
        return s;
    },
    // 文本编码转化成 html，不在 editor 之中处理。
    // textToHtml(str) {
    //     return str.replace(/\n\r/g, "<br/>")
    // },
    // htmlToText(str) {
    //     return str.replace("<br/>", /\n/g)
    // }
}

class CardEditor {
    constructor(id, callback) {
        var _self = this // 用于闭包变量
        this.name = "card_editor"
        this.editor = this.id(id)
        this.content = "" // 文本内容
        this.code = 0 // 判断是否显示源码

        // 使用 iframe 作为主体代号
        this.iframe = this.editor
        this.callback = callback

        // 文本内容
        // this.content = this.document.body
        // 文本设置

        // 监听文本变化
        if (this.textarea) {
            setInterval(function() {
                _self.setTextarea()
            }, 1000)
        }

        this.inputEnable()

        this.initParam()
        this.registerListener()
    }

    // 转处理函数
    id(id) {
        return document.getElementById(id)
    }

    c(label) {
        return document.createElement(label)
    }

    getHTML() {
        return this.iframe.innerHTML
    }

    // 处理不同文本类型，之间的转换问题，在 html 上正确显示
    // 转换成 html
    // codingToHtml(type) {
    //     if (type == "text") {
    //         let text = this.editor.innerText
    //         return Tool.textToHtml(text)
    //     }
    // }

    // 结束的编码转换
    // 将 html 转换成目标编码文本
    // htmlToCoding(type) {
    //     if (type == "text") {
    //         let html = this.editor.innerHTML
    //         return Tool.htmlToText(html)
    //     }
    // }

    // 初始化参数
    initParam() {
        this.range = document.createRange ? window.getSelection() : document.selection.crearteRagne()
    }

    setTextarea() {
        if (!this.textarea) return;
        let html = this.code ? Tool.html(this.getHTML()) : this.getHTML()
        html = html.replace(/<pre(.*?)>(.*?)<\/pre>/gi, function(all, a = '', b = '') {
            return '<pre' + a + '>' + b.split('<br>').join("\n") + '</pre>';
        });
        this.textarea.value = html;
    }

    // 注册监听者
    registerListener() {
        const _self = this

        // 处理文本输入
        this.iframe.addEventListener('keydown', function() {
            // event.stopPropagation()
            // const selection = _self.range.getRangeAt(0)
            // if (e.keyCode == 13) { // 回车
            // }
            _self.updateCallback()
        })
    }

    updateCallback() {
        const html = this.getHTML()
        this.callback(html)
    }

    focus() {
        this.iframe.focus()
    }

    // 控制输入
    inputEnable() {
        this.iframe.designMode = 'on'
        this.iframe.contentEditable = true
    }
    inputDisable() {
        this.iframe.designMode = 'off'
        this.iframe.contentEditable = false
    }

}

export default CardEditor